home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
C64
/
T-TPUG Old Monthly Disks
/
(c)t9.d64
/
dir list sort.c
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2007-02-04
|
10KB
|
361 lines
100 POKE53280,6:POKE53281,6
150 PRINT"[147]DISK DIRECTORY SORT/LIST":PRINT"BY DOUGLASS E GOULEY.";
200 PRINT" MARCH 1984.[146]"
250 PRINT" TPUG # 4300"
300 PRINT"HELLO, PLEASE ENTER TO-DAY'S DATE"
350 PRINT"(ANY FORMAT WILL DO)"
400 INPUT" 15 MARCH 1984.[157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]";DA$
450 PRINT"THANK YOU[146]"
500 PRINT"[147]THE PRINTER ROUTINE USES"
550 PRINT"PRINT#4,4 FOR CBM OPTION."
600 PRINT"PRINT#128,4 FOR OTHER OPTION."
650 PRINT"CHOSE A PRINTER OPTION :-"
700 PRINT"C = CBM."
750 PRINT"O = OTHER."
800 INPUT" O[157][157][157]";TP$
850 PRINT"THANK YOU[146]"
900 INPUT" INSTRUCTIONS (Y/N) N[157][157][157]";Q$
950 IF Q$ = "N" THEN 2300
1000 PRINT"[147]THIS PROGRAMME WILL ASK YOU TO FEED IN"
1050 PRINT"EACH OF YOUR 1541 DISKETTES ONE AT A"
1100 PRINT"TIME. THE COMPUTER WILL READ THE"
1150 PRINT"DIRECTORY INTO A TABLE."
1200 PRINT"AT THE END OF EACH DISKETTE YOU WILL BE"
1250 PRINT"ASKED IF THERE ARE ANY MORE DISKETTES"
1300 PRINT"TO BE READ. RESPOND Y/N."
1350 PRINT"AFTER ALL DISKETTES HAVE BEEN READ, YOU"
1400 PRINT"WILL BE GIVEN THE OPTIONS :- "
1450 PRINT"-> PRINTER LISTING AS ENTERED,OR SORTED"
1500 PRINT"-> SORT BY DISK-ID THEN PRINT HARD-COPY"
1550 PRINT"-> SORT BY PROGRAMME NAME THEN PRINT HARD-COPY."
1552 PRINT"-> FIND ANY PROGRAMME/FILE."
1554 PRINT"-> SAVE THE ACCUMULATED PROG/FILE NAMES TO DISK."
1556 PRINT"-> READ THE ACCUMULATED PROG/FILE NAMES FROM DISK."
1600 PRINT"-> QUIT.!"
1650 PRINT"MULTIPLE CHOICES ARE ALLOWED"
1750 PRINT"IF THE COMPUTER PAUSES,GIVE IT TIME TO THINK !"
1800 INPUT"PRESS RETURN TO CONTINUE-";Q$
1850 PRINT"[147] "
1900 PRINT"WATCH THE FREE BYTE[146] DISPLAY TO SEE IF"
1950 PRINT"YOU STILL HAVE ROOM TO INSERT DISKETTES."
2000 PRINT"RESERVE ABOUT 100 BYTES FOR THE SORT."
2050 PRINT"MANY THANKS TO 'COMPUTE!' FOR THE IDEA, AND"
2100 PRINT"TO LORNA MCCARNEY FOR HER TYPING SKILLS."
2102 PRINT"TO AL SCARLETT FOR THE LOAN OF HIS PROGRAMMING MANUALS."
2150 PRINT"IF THE COMPUTER PAUSES,GIVE IT TIME TO ":PRINT"THINK !"
2200 INPUT"PRESS RETURN TO CONTINUE-";Q$
2245 :
2250 DIMS9(20,2) : REM SORT TABLE.
2300 DIMI$(900) : REM MAX TABLE ENTRY
2318 :
2320 POKE53280,1:POKE53281,1
2350 PRINT"[147]"
2352 PRINT"DO YOU WISH TO LOAD A PREVIOULSY SAVED FILE OF NAMES (Y/N)"
2354 INPUT" N[157][157][157]";Q$
2358 IF Q$ = "Y" THEN 15000
2400 INPUT"INSERT FIRST DISKETTE, PLEASE.(RETURN)"; RQ$:RQ$="":Q$=""
2450 DN=0
2500 DN=DN+1:PRINT"READING DISK DIRECTORY NUMBER";DN;"."
2550 OPEN3,8,0,"$0":GET#3,D1$,D2$
2600 GET#3,D1$,D2$:GET#3,D1$,D2$:N=0
2650 IF LEFT$(N$,3) ="USR" THEN 2900
2700 IF LEFT$(N$,3) ="PRG" THEN 2900
2750 IF LEFT$(N$,3) ="SEQ" THEN 2900
2800 IF LEFT$(N$,3) ="REL" THEN 2900
2850 K$=LEFT$(N$,2):K$=K$+" " :REM PRINTK$
2900 IFD1$<>""THENN=ASC(D1$)
2950 IFD2$<>""THENN=N+ASC(D2$)*256
3000 GET#3,D2$:IFST<>0THEN3500
3050 IFD2$<>CHR$(34)THEN3000
3100 GET#3,D2$:IFD2$<>CHR$(34)THENI$(P)=I$(P)+D2$:GOTO3100
3150 GET#3,D2$:IFD2$=CHR$(32)THEN3150
3200 N$=""
3250 N$=N$+D2$:GET#3,D2$:IFD2$<>""THEN3250
3300 PRINTN;" ";I$(P),N$,P
3350 I$(P) = K$+I$(P)
3400 REM PRINTI$(P) DEBUG AID.
3450 IFST=0THEN3550
3500 CLOSE3:GOTO 5650
3550 :
3600 P=P+1:GOTO2600
3650 GOSUB 7450 : REM FIX TABLE.
3700 GOTO 4400
3750 :
3800 REM PRINT TO SCREEN.
3850 PRINT:PRINT"ID PROG/FILE NAME "
3900 I=0:K=0
3950 I = I + 1
4000 K = K + 1
4050 IF I > P THEN 4350
4100 IF K > P THEN 4350
4150 PRINT I$(I)
4200 IF K < 20 THEN 3950
4250 INPUT"PRESS RETURN TO CONTINUE-";Q$
4300 K=0:GOTO 3950
4350 RETURN
4400 PRINT"FREE BYTES =";:GOSUB7250:PRINTM
4450 PRINT"TOTAL NUMBER PROGS (INCL DISK HDR) =";P
4500 REM CHOICES
4550 PRINT"PLEASE CHOOSE AN OPTION :-"
4600 PRINT"1. SCREEN LIST DIRECTORYS AS ENTERED."
4650 PRINT"2. PRINTER LIST DIRECTORYS AS ENTERED."
4700 PRINT"3. SORT BY DISK-ID THEN PRINTER LIST. "
4750 PRINT"4. SORT BY PROGRAME/FILE THEN PRINTER LIST. "
4800 PRINT" # 4 WILL GIVE YOU A CROSS REFERENCE"
4850 PRINT" TO DISK-ID."
4900 PRINT"5. SCREEN LIST SORTED BY DISK-ID."
4950 PRINT"6. SCREEN LIST SORTED BY PROG/FILE."
5000 PRINT"7. QUIT.[146]"
5010 PRINT"8. FIND PARTICULAR PROG/FILE."
5015 PRINT"9. SAVE THE CURRENT TABLE OF NAMES TO DISK."
5050 PRINT"NOTE: YOU WILL BE RETURNED TO THIS MENU."
5100 INPUT"CHOICE 4[157][157][157]";Q$:PT$=Q$
5150 IF Q$="1" THEN 9750
5200 IF Q$="2" THEN 10150
5250 IF Q$="3" THEN 10450
5300 IF Q$="4" THEN 10800
5350 IF Q$="5" THEN 11300
5400 IF Q$="6" THEN 11850
5450 IF Q$="7" THEN 11150
5452 IF Q$="8" THEN 14000
5454 IF Q$="9" THEN 16000
5500 PRINT"SORRY, PLS PICK AGAIN (OPTION 1-9 ONLY)...":GOTO5100
5550 GOTO 5600
5600 PRINT"FINISHED, BYE...": END
5650 :
5652 IF DN = 10 THEN 5700
5654 IF DN = 20 THEN 5700
5656 IF DN = 30 THEN 5700
5658 IF DN = 40 THEN 5700
5660 IF DN = 50 THEN 5700
5665 IF DN > 59 THEN 5700
5670 GOTO 5750
5700 PRINT"FREE BYTES =[146]";:GOSUB 7250:PRINTM
5750 INPUT"ANY MORE DISKS TO FEED IN Y/N)[146] Y[157][157][157]";Q$
5800 IF Q$="Y" THEN 5900
5850 GOTO 3650
5900 INPUT"[144][151] INSERT NEXT DISKETTE THEN PRESS RETURN [152][146].";Q$
5950 REM PRINT"[146]FREE BYTES =";:GOSUB 4200:PRINTM
6000 GOTO 2500
6050 :
6100 REM PRINTER (HARD-COPY) ROUTINE.
6150 :
6200 IF TP$ = "O" THEN 6400 : REM EPSON
6250 GOSUB 1245 0: REM CBM
6300 RETURN
6350 :
6400 REM NON-CBM PRINTER (EPSON !!).
6450 OPEN128,4
6500 PRINT#128, CHR$(27);"@"
6550 PRINT#128,CHR$(7)CHR$(27);"@";" "
6600 PRINT#128,CHR$(14)"DISK DIRECTORYS AS AT ";DA$
6650 PRINT#128,CHR$(27)" "
6700 PRINT#128,CHR$(27)CHR$(15)"ID PROGRAMME/FILE";" CHOICE =";CH$
6750 PRINT#128,CHR$(27);"@";" "
6800 FOR I = 1 TO P
6850 PRINT#128,CHR$(18) I$(I)
6900 NEXT I
6950 PRINT#128," ": PRINT#128,"FREE BYTES =";:GOSUB 7250: PRINT#128,M
7000 PRINT#128,"TOTAL NUMBER PROGS (INCL DISK HDR) =";P
7050 PRINT#128,"NUMBER DISKETTES READ =";DN
7100 PRINT#128
7150 PRINT#128,"FINISHED, BYE..." :CLOSE 128
7200 RETURN
7250 REM CALC FREE BYTES.
7300 M = FRE(0)-(FRE(0)<0)*65536
7350 :
7400 RETURN
7450 :
7500 REM FIX THE 1ST TWO BYTES OF THE TABLE RE:- DISK ID CARRIES OVER 1 TOO
7550 REM MANY.
7600 :
7650 PRINT"ONE MOMENT PLEASE...": GOSUB 7250
7700 E$="":Q=0:V$="":C$="":W=0:W1=0
7750 P=P-1 : F$=I$(P)
7800 FOR I = 1 TO P
7850 Q = I + 1
7900 IF Q >(P) THEN 8350
7950 V$=I$(Q) : REM NEXT TABLE ENTRY
8000 C$=I$(I) : REM CURR TABLE ENTRY
8050 IF LEFT$(C$,2) = LEFT$(V$,2) THEN 8300
8100 W=LEN(V$)
8150 W1 = W - 4
8200 E$=LEFT$(V$,2)+"[160]"+MID$(C$,4)
8250 I$(I) = E$
8300 NEXT I
8350 I$(P)=F$
8400 RETURN
8450 REM SORT ROUTINE
8500 I1=1:J1=P:A=0:T$=""
8550 I=I1:J=J1:S=-1
8600 :
8650 IF PT$ = "4" OR PT$ = "6" THEN 8800
8700 IF I$(I) <= I$(J) THEN 9000
8750 GOTO 8850
8800 IF MID$(I$(I),4) <= MID$(I$(J),4) THEN 9000
8850 T$=I$(I) : I$(I)=I$(J) : I$(J)=T$
8900 PRINT"SORTING..";
8950 S = SGN(-S)
9000 IF S=1 THEN 9100
9050 J=J-1 : GOTO 9150
9100 I=I+1
9150 IF I<J THEN 8600
9200 IF I+1 >= J1 THEN 9300
9250 A=A+1 : S9(A,1)=I+1 : S9(A,2)=J1
9300 J1 = I-1
9350 IF I1<J1 THEN 8550
9400 IF A=0 THEN 9550
9450 I1 = S9(A,1) : J1 = S9(A,2) : A=A-1
9500 GOTO 8550
9550 REM SORT FINISHED SO PRINTER.
9600 PRINT" ":PRINT " SORT FINISHED (QUICK-SORT METHOD USED)[146]"
9650 REM DEBUG GOSUB 3555
9700 RETURN
9750 REM CHOICE 1 = CRT LIST AS ENTERED
9800 CH$= "PRINT TO SCREEN AS ENTERED."
9850 PRINT"";CH$;"[145] "
9900 GOSUB 3750
9950 INPUT"PRESS RETURN TO CONTINUE-";Q$
10000 PRINT"[147]"
10050 GOTO 4500
10100 :
10150 REM CHOICE 2 = PRT LIST AS ENTERED
10200 CH$ = "PRINTER PROGS/FILES AS ENTERED."
10250 PRINT"[145] ";CH$;" [145]"
10300 GOSUB 6450
10350 GOTO 4500
10400 :
10450 REM CHOICE 3 = SORT/PRT BY DISK-ID
10500 CH$ = " 3. PRINTER PROGS/FILES SORTED BY DISK-ID."
10550 PRINT"[145] ";CH$;" [145]"
10600 GOSUB 8450 :PRINT"[145]"
10650 GOSUB 6050
10700 GOTO 4500
10750 :
10800 REM CHOICE 4 = SORT/PRT BY PROG/FILE
10850 CH$ = " 4. PRINTER PROGS/FILES SORTED BY PROGRAMME/FILE NAME."
10900 PRINT"[145] ";CH$;" [145]"
10950 GOSUB 8450 :PRINT"[145]"
11000 GOSUB 6050
11050 GOTO 4500
11100 :
11150 REM CHOICE 7 = QUIT.
11200 PRINT"THAT'S IT FOLKS."
11250 GOTO 5600
11300 :
11350 REM CHOICE 5 = SCREEN LIST SORTED BY DISK-ID.
11400 CH$ = "SCREEN PROGS/FILES SORTED BY DISK-ID."
11450 PRINT"[145] ";CH$;" [145]"
11500 GOSUB 8450 :PRINT"[145]"
11550 PRINT"[145] ";CH$;" [145]"
11600 GOSUB 3750
11650 PRINT"ANY KEY TO CONTINUE..."
11700 GET Q$: IF Q$ = "" THEN 11700
11750 GOTO 4500
11800 :
11850 :
11900 REM CHOICE 6 = SCREEN LIST SORTED BY PROG/FILE.
11950 CH$ = "SCREEN PROGS/FILES SORTED BY PROG/FILE."
12000 PRINT"[145] ";CH$;" [145]"
12050 GOSUB 8450:PRINT"[145]"
12100 PRINT"[145] ";CH$;" [145]"
12150 GOSUB 3750
12200 PRINT"ANY KEY TO CONTINUE..."
12250 GET Q$: IF Q$ = "" THEN 11700
12300 GOTO 4500
12350 :
12400 :
12450 REM PRINTER (HARD-COPY) ROUTINE.
12500 :
12550 REM CBM PRINTER.
12600 :
12650 REM NON-CBM (EPSON), GOTO 6100 .
12700 :
12750 OPEN4,4
12800 PRINT#4, CHR$(27);" "
12850 PRINT#4,CHR$(15)CHR$(15);" ";" "
12900 PRINT#4,CHR$(14)"DISK DIRECTORYS AS AT ";DA$
12950 PRINT#4,CHR$(15)" "
13000 PRINT#4,CHR$(15)CHR$(15)"ID PROGRAMME/FILE";" CHOICE =";CH$
13050 PRINT#4,CHR$(15);" ";" "
13100 FOR I = 1 TO P
13150 PRINT#4,I$(I)
13200 NEXT I
13250 PRINT#4," ": PRINT#4,"FREE BYTES =";:GOSUB 7250: PRINT#4,M
13300 PRINT#4,"TOTAL NUMBER PROGS (INCL DISK HDR) =";P
13350 PRINT#4,"NUMBER DISKETTES READ =";DN
13400 PRINT#4
13450 PRINT#4,"FINISHED, BYE..." :CLOSE 4
13500 RETURN
14000 :
14010 :REM CHOICE 8 = FIND PROG/FILE.
14020 :
14100 PRINT"[147]YOU HAVE PICKED CHOICE 8 :-"
14110 PRINT"FIND A PARTICULAR PROGRAMME OR FILE.[146]"
14120 PRINT"USE THE FOLLOWING TECHNIQUE :-"
14130 PRINT"1. LOAD IN YOUR PREVIOUSLY SAVED PROG/FILE TABLE"
14132 PRINT" THEN USE OPTION X. (IN THE MENU)"
14135 PRINT:PRINT"OR,":PRINT
14140 PRINT"2. FEED IN ALL OF THE DISKETTES (WHICH YOU MAY HAVE JUST DONE)."
14200 PRINT"THEN PICK EITHER OPTION 4 OR 6 FROM THE MENU. THIS WILL SORT THE FILE"
14250 PRINT"INTO ALPHA ORDER AND DISPLAY IT."
14300 PRINT"YOU CAN THEN LOCATE YOUR PROGRAMME/FILE."
14350 PRINT"THE SCREEN DISPLAY WILL PAUSE AFTER EVERY 20 ENTRIES."
14400 INPUT"PRESS RETURN TO CONTINUE-";Q$
14500 GOTO 4550
15000 :
15010 REM LOAD A PREVIOUSLY SAVED FILE.
15020 :
15100 INPUT"WHAT FILENAME ";XN$
15200 PRINT"OK, I WILL TRY TO LOAD FILE ";XN$
15301 OPEN 15,8,15,"IO"
15305 GOSUB 17000 : REM DISK STATUS
15550 OPEN 2,8,2,"0:"+XN$+",S,R"
15560 GOSUB 17000
15600 PRINT "LOADING ";XN$
15610 INPUT#2,NE% : P = NE% :PRINT"NUMBER ENTRIES = ";P
15620 FOR I = 1 TO P+1
15630 INPUT#2,I$(I) : PRINTI$(I)
15660 NEXT I
15670 CLOSE 2
15680 PRINT"FINISHED READING ";P ;"RECORDS."
15700 GOTO 4500 : REM MAIN MENU.
16000 :
16010 REM SAVE THE CURRENT TABLE OF NAMES.
16020 :
16040 CLOSE 15: OPEN 15,8,15,"IO"
16100 GOSUB 17000 : REM DISK STATUS
16105 YN$="DEFAULT.DIRECTORY"
16110 PRINT"OK. I WILL CREATE A NEW DISK FILE TO SAVE THE CURRENT TABLE"
16111 PRINT"OF NAMES."
16120 INPUT"WHAT FILENAME ";YN$
16200 PRINT"OK, I WILL WRITE ";YN$:PRINT"TO DISK ..."
16300 :
16305 REM I$(1) = "TT TEST" : P = 1
16306 REM I$(2) = "TT TEST2" : P = 2
16310 OPEN 2,8,2,"0:"+YN$+",S,W"
16320 GOSUB 17000
16321 PE = P + 1
16322 NE% = PE : REM NUMBER ENTRIES
16325 PRINT#2,NE% : REM FOR FUTURE LOAD
16400 FOR I = 1 TO P
16410 PRINT#2,I$(I)CHR$(13);
16420 NEXT I
16450 CLOSE 2
16500 GOSUB 17000
16505 PRINT"FINISHED WRITING FILE TO DISK "
16510 PRINT"NAME = ";YN$
16600 CLOSE 15
16900 GOTO 4500
17000 :
17010 REM DISK STATUS.
17020 :
17100 INPUT#15,ZN,ZS$,ZT,ZY
17200 IF ZN=0 THEN RETURN
17210 PRINT"DISK ERROR ... "
17300 PRINT ZN;ZS$;ZT;ZY
17320 CLOSE 2
17400 STOP
17900 :
17910 :